کار با کمبو باکس ها در برنامه نویسی VBA
ما در اکسس با کنترل های متعددی سر و کار داریم.
تکس باکس ها ، دکمه ها ، چک باکس ها و …. نمونه هایی از این کنترل ها هستند .
هر کدام از این کنترل ها برای کار خاصی طراحی شده اند و ما می توانیم بسته به نیاز خود از آنها در جاهای مختلف استفاده کنیم .
امروز می خواهیم راجع به کمبو باکس ها در VBA و نحوه کار با آنها صحبت کنیم .
کمبو باکس ها یکی از کنترل هایی هستند که به وفور با آنها سرو کار داریم و به دفعات از آنها در پروژه های خود استفاده می کنیم.
مطمئنا با نحوه ایجاد و کار با یک کمبو باکس در محیط اکسس بخوبی آشنایی دارید .
اما امروز می خواهیم به نحوه کار باکمبو باکس ها در محیط کد نویسی VBA بپردازیم .
مطالبی که امروز در این پست می خواهیم با هم مرور کنیم شامل موارد زیر می باشد .
۱- چگونه با استفاده از کد نویسی یک کمبو باکس را ایجاد کنیم . ؟
۲- چگونه با استفاده از کد نویسی کمبوباکس ها را مدیریت کنیم ؟
پس تا پایان این پست نیز همراه من باشید .
فهرست محتوا
چطور به کمک کدهای وی بی ای یک کمبو باکس را ایجاد کنیم ؟
در اولین قدم می رویم به سراغ این مطلب که اصلا چه طور می توانیم یک کمبو باکس را ایجاد کنیم .
بطور کلی برای ایجاد یک کمبو باکس ما دو راه ژیش رو داریم .
راه اول که همان راه مرسومی است که شی گمبو باکس را انتخاب و آن را درون فرم یا گزارش خود قرار می دهیم .
اما راه دومی که موضوع بحث امروز ما می باشد راه و یا روشی است که با استفاده از کد نویسی در محیط VBE می توانیم به ایجاد یک کمبو باکس بپردازیم .
خوب برای این کار می رویم به سراغ مراحل انجام آن .
فرض کنید که ما فرمی داریم که در محیط اکسس قرار دارد .
در داخل این فرم یک دکمه داریم .
می خوهیم کاری کنیم که به محض اینکه بر روی این دکمه کلیک شد دو اتفاق برای ما رخ دهد .
اول اینکه یک فرم جدید برای ما ایجاد شود .
دوم اینکه بطور خودکار در داخل این فرم جدید یک کمبو باکس قرار گیرد .
برای این کار به سراغ رویداد On_Click دکمه خود رفته و کدهای زیر را در آن وارد می کنیم .
Private Sub cmdCreateControl_Click()
Dim ctl As Control
DoCmd.OpenForm "Form1", acDesign
Set ctl = CreateControl("Form1", AcControlType.acComboBox)
DoCmd.OpenForm "Form1", acNormal
Set ctlGenders = Nothing
End Sub
بیایید با هم نگاهی به این کدها بکنیم .
در خط اول ما یک متغیر تعریف کردیم به نام Ctl .
این کنترل را از نوع control قرار داده ایم .
در خط دوم با استفاده از دستور Dcmd از برنامه می خواهیم که یک فرم را برای ما باز کند .
فرم مورد نظر ما از قبل ایجاد شده و با نام Form1 در اکسس ذخیره شده است
اما نکته مهم این است که این فرم باز شده باید حتما در حالت Design باشد .
در خط بعدی که مهمترین بخش این کد می باشد جایی است که با استفاده از آن کمبو باکس خود را ایجاد می کنیم .
برای این کار ما از دستور Create Control استفاده کرده ایم .
این دستور شامل یکسری از آرگومانها می باشد که با هم آن ها را مورد بررسی قرار می دهیم .
آرگومان اول Form name :
در این قسمت باید نام فرمی را وارد کنیم که قرار است کمبو باکس ما در داخل آن ایجاد شود .
آرگومان دوم Control Type :
در این آرگومان نوع کنترل مورد نظر خود را انتخاب می کنیم.
البته این آرگومان به نوبه خود می تواند دارای چندین گزینه باشد .
از انجا که در اینجا کنترل مورد نظر ما از نوع کمبو باکس است گزینه accombobox را انتخاب می کنیم .
آرگومان سوم section
با استفاده از این آرگومان تعیین می کنیم که کمبو باکس مورد نظر در کدام قسمت از فرم ما قرار گیرد .
در اینجا ما گزینه acdetail را انتخاب می کنیم .
آرگومان چهارم :Parent
این آرگومان تعیین می کند که آیا فرم ما از یک فرم والد تبعیت می کند یا خیر در این صورت باید نام فرم والد خود را در این قسمت وارد کنیم .
آرگومان پنجم :ColumnName
با استفاده از این آرگومان نام ستونی را که کمبو باکس ما اطلاعات خود را از آن می گیرد را وارد می کنیم .
البته این در صورتی است که کمبو باکس ما به یک جدول یا کوئری متصل باشد و اطلاعات خود را از یکی از ستون های آن دریافت کند .
آرگومان ششم :Left,Top.
با استفاده از این آرگومان موقعیت قرارگیری کمبو باکس را در داخل فرم تعیین می کنیم .
آرگومان هفتم : Width, Height
با کمک این آرگومان نیز می توانیم طول و عرض کمبو باکس خود را تعیین کنیم .
نکته مهم در مورد آرگومانهای ششم و هفتم که باید حتما مورد دقت قرار دهید این است که واحد اندازه گیری مربوط به این مقادیر بصورت twip می باشد .
اگر بخواهیم کد بالا را مجدد باز نویسی کرده و تمامی آرگومانهای مربوطه را در آن دخیل کنیم کد ما بصورت زیر خواهد بود .
Private Sub cmdCreateControl_Click()
Dim ctl As Control
DoCmd.OpenForm "Form1", acDesign
_ , , , Set ctl = CreateControl("form1", acComboBox, acDetail
( ۲۰۰۰, ۲۰۰۰, ۱۰, ۱۰
DoCmd.OpenForm "Form1", acNormal
Set ctlGenders = Nothing
End Sub
بعد از اینکه این کدها را وارد کردیم کافی است بر روی دکمه مورد نظر کلیک کنید .
مشاهده می کنید که یک فرم ایجاد شده و در داخل آن یک کمبو باکس قرار می گیرد .
پس ما توانستیم با استفاده از کد نویسی یک کمبو باکس را ایجاد کنیم .
حالا باید برویم به سراغ کار با اجزا و ویژگی های آن و در واقع ببینیم که چگونه می توانیم با استفاده از کد نویسی به مدیریت یک کمبو باکس بپردازیم .
وارد کردن اطلاعات در کمبو باکس ها برای نمایش دادن
در اولین قدم کمبو باکس ما باید اطلاعاتی برای نمایش به کاربر داشته باشد.
برای اینکه ما کمبو باکس خود را حاوی اطلاعات کنیم چند راه در پیش داریم و در واقع می توانیم از چند راه این کار را انجام دهیم .
با هم به بررسی همه این موارد می پردازیم.
اما قبل از اینکه به سراغ خود این روش ها برویم باید یک نکته مهم را با هم مرور کنیم .
آن نکته این است که ما باید تعیین کنیم که کمبو باکس ما قرار است اطلاعات خود را از چه منبع و رفرنسی دریافت کند .
در اکسس ما سه نوع رفرنس برای اطلاعات یک کمبو باکس می توانیم تعیین کنیم .
ما برای کار با رفرنس ها و معرفی آنها در اکسس با دو ویژگی سر و کار داریم .
ویژگی اول Control Source Type نام دارد .
با استفاده از این ویژگی تعیین می کنیم که نوع منبعی که قرار است کمبو باکس ما اطلاعات خود را از آن دریافت کند از چه نوعی است .
خود این منابع می توانند شامل سه دسته باشند که در ادامه آنها را بررسی می کنیم .
با هم نگاهی به این رفرنس ها و انواع آنها بکنیم.
۱- دسته اول Value List
اگر شما یک لیست ثابت از مقادیر و یا اطللاعات را داشته باشید و بخواهید آنها را در قالب یک کمبو باکس به کاربر نمایش دهید می توانید از این نوع رفرنس برای کمبو باکس خود استفاده کنید .
اما منظور از لیست ثابت چیست ؟
از جمله لیست هایی که اطلاعات آنها همیشه ثابت هستند می توان به ایام هفته ، فصل های سال و یا ماههای سال اشاره کرد .
اینها اطلاعاتی هستند که هم تعداد مشخص دارند و هم نیازیب ه تغییر در آنها وجود ندارد .
بنابراین به راحتی انها را می توان در قالب یک Value List در داخل یک کمبو باکس قرار داده و آنها را در اختیار کاربر بگذاریم .
اما چگونه می توانیم این کار را انجام دهیم .
برای این کار نیاز به دستوری به نام Add Item داریم .
با هم این دستور و نحوه استفاده از آن را بررسی می کنیم
استفاده از متد Add Item
ساده ترین روشی که در برنامه نویسی می توانیم از آن استفاده کنیم تا اطلاعات خود را در داخل یک کمبو باکس نمایش دهیم استفاده از دستور و یا متد Add Item است .
حال برای ادامه کار به سراغ کمبو باکسی که در مرحله قبل ایجاد کردیم می رویم .
تصور کنید که می خواهیم در این کمبو باکس اطلاعات مربوط به روز های هفته را در داخل آن ذخیره کرده و به کاربر نمایش دهیم .
برای این کار می توانیم از دستور فوق در کدهای خود استفاده کنیم .
به کدهای زیر نگاه کنید .
Private Sub Form_Load()
With Me.cbo - days
.RowSourceType = "value list"
AddItem."شنبه"
AddItem."یک شنبه"
AddItem." دو شنبه"
AddItem." سه شنبه"
AddItem. " چهار شنبه"
AddItem. " پنج شنبه"
AddItem. "جمعه "
End With
End Sub.
حالا این کدها را با هم بررسی کنیم .
اول اینکه من در اینجا کمبو باکس مورد نظر خود را به نام ” cbo_days ” نام گذاری کرده ام.
دوم اینکه تمامی کدهای مربوطه را در داخل رویداد On Load فرم خود نوشته ام .
این کار باعث می شود که به محض اینکه فرم مورد نظر من لود شد کمبو باکس موجود در داخل این فرم اطلاعات مورد نظری را که در قالب یک Value List برایش تعریف کرده ایم را در خود ذخیره کند .
پس این اولین روشی بود که ما می توانیم با استفاده از آن اطلاعات مورد نظر خود را در قالب یک کمبو باکس به کاربر نمایش دهیم .
حالا برویم به سراغ روش دوم .
آشنایی و استفاده از خاصیت table \ query
اکسس این امکان را به شما می دهد که اطلاعات خاصی را از یک جدول و یا کوئری که در حال حاضر در بانک اطلاعاتی شما وجود دارد را در قالب یک کمبو باکس در اختیار کاربر قرار دهید .
برای این کار باید به سراغ دستورات SQL بروید .
برای این منظور اول جدول زیر را در نظر بگیرید .
می خواهیم اطلاعات مربوط به فیلد نام دروس را در قالب یک کمبو باکس به کاربر نمایش دهیم .
برای این منظور از کدهای زیر استفاده می کنیم .
Private Sub Form_Load()
Dim strsql As String
With Me.cbo_ostan
RowSourceType = "table/query"
strsql = "select lesson from tblstudent2"
RowSource = strsql.
End With
End Sub.
نکته مهم و کاربردی در خطوط کد بالا مربوط به خط شماره ۸ می باشد .
در این خط از کد ما خاصیت RowSourceType را برابر با عبارت “table/query” قرار داده ایم .
در این خط ۱۰ از کدها هم از یک عبارت SQL استفاده کرده ایم .
برای آشنایی بهتر و بیشتر با این دستورات می توانید به مطلب کار با دستورات SQL مراجعه کنید .
در انتها هم که سورس مربوط به کمبو باکس خود را برابر با عبارت sql خود قرار داده ایم .
حال اگر به محیط فرم خود برگردید و کمبو باکس خود را باز کنید مشاهده می کنید که کمبو باکس شما حاوی لیستی از تمامی دروس مندرج در جدول مورد نظر شما می باشد .
اما اکر که خوب دقت کنید مشاهده می کنید که این لیست که در کمبو باکس ما نمایش داده می شود دارای موارد تکراری است .
برای اینکه عنوان هر درس فقط یک بار به نمایش درآید باید یک تغییر کوچک در دستور خود ایجاد کنیم .
در اینجا کدهای جدید را درج کی کنم .
اما تشخیص اینکه این کدها در چه قسمتی با کدهای قبلی تفاوت دارند را بر عهده خودتان می گذارم
Private Sub Form_Load()
Dim strsql As String
With Me.cbo_ostan
RowSourceType = "table/query"
strsql = "select distinct lesson from tblstudent2"
RowSource = strsql.
End With
End Sub
ویژگی Filed List در کمبو باکس ها
یک ویژگی وجود دارد به اسم Field List . از اسم این ویژگی هم پیداست که چه کاری می تواند برای شما انجام بدهد
با استفاده از این ویژگی می شود از اطلاعات مورد نظر خودتان را از یک جدول استخراج و در قالب یک لیست در اختیار کمبو باکس قرار بدهید تا آنها را به کاربر نمایش بدهد .
برای این کار از کدهای زیر استفاده می شود .
Private Sub Form_Load()
Dim strsql As String
strsql = "select * from tbllesson "
With Me.cbo_ostan
RowSourceType = "field list"
RowSource = strsql.
End With
End Su
وقتی که فرم مورد نظر ما لود شود در داخل آن یک کمبو باکس وجود دارد که اطلاعاتی مد نظرمان که در قالب کدهای بالا تعریف کرده ایم را در داخل خودش نمایش می دهد .
در ادامه با هم به سراغ یک سری از ویژگی های مربوط به کمبو باکس ها می رویم و با نحوه تنظیم و کار با آنها بیشتر آشنا خواهیم شد .
آشنایی با برخی از تنظیمات مربوط به کمبو باکس ها
1- تعیین تعداد سطرهای قابل نمایش در کمبو باکس
فرض کنید که یک کمبو باکسی دارید که تعداد 10 ردیف اطلاعات دارد اما بنابه هر دلیل می خواهید فقط 3 ردیف از مجموع 10 ردیف اطلاعات این کمبو باکس به کاربر نمایش داده شود .
برای این کار می توانید از کد زیر استفاده کنید
Me.Combo1.ListRows = 3
2- تعیین تعداد ستون ها در یک کمبو باکس
به جدول زیر نگاه کنید .
اینجا می خواهیم کاری کنیم که اطلاعات موجود در ستون نام معلم و رشته ای که هر معلم تدریس می کند در قالب یک کمبو باکس به کاربر نمایش داده شود .
strsql = "select tname ,reshte
from tbllesson"
با استفاده از کد بالا مشخص کرده ایم که کمبو باکس ما باید شامل اطلاعات موجود در 2 تا از ستون های جدول مورد نظر مان باشد .
برای اینکه بشود اطلاعات هر دو تای این ستونها را در داخل کمبو باکس خودمان نمایش بدهیم باید کاری کنیم که ممبو باکس مورد نظر دارای 2 تا ستون باشد .
برای این کار از کدهای زیر استفاده می کنیم .
me.Combo1.ColumnCount = 2
با استفاده از این کد مشخص می کنیم که کمبو باکس مورد نظر ما باید شامل دو تا ستون باشد .
حالا فرض کنید که می خواهیم برای هر کدام از این دو تا ستون یک عنوان هم مشخص کنیم .
برای این کار از کد زیر استفاده می کنیم .
me.Combo1.ColumnHeads = True
اگر بخواهیم کدهایی که تا اینجا نوشتیم را در یک جا جمع کنیم نتیجه مثل زیر است .
Private Sub Form_Load()
Dim strsql As String
strsql = "select tname ,reshte from tbllesson"
With Me.cbo_ostan
RowSourceType = "table"/query.
ColumnCount = 2.
RowSource = strsql.
ColumnHeads = True
End With
End Sub
خروجی کدهای بالا چیزی شبیه به تصویر زیر است .
یا برای تغییر فونت نوشته های یک کمبو باکس می شود از کد زیر استفاده کرد .
"Me.Combo1.FontName = "B titr
از اینکه تا به اینجای مطلب با من همراه بودید سپاسگذارم . خوشحال می شوم اگر سوال یا نظری در مورد این مطلب دارید در قسمت دیدگاهها با من و بقیه دوستان به اشتراک بگذارید .
به امید دیدار مجدد شما در سافت پلاس .
دیدگاهتان را بنویسید